# 自定义过滤器  本质是函数  实现索引格式的转换  还要在主程序中添加功能
import functools

from flask import session, current_app, g

from info.utils.models import User


def func_index_convert(value):
    index_dict = {1: "first", 2: "second", 3: "third"}
    return index_dict.get(value, "")


# 判断用户是否已经登陆
def user_login_data(func):
    @functools.wraps(func)
    # 该装饰器函数可以让被装饰的函数使用指定的函数名
    # 若使用闭包函数的名称来构建函数标记，会出现标记冲突
    # 使用functools.wraps可以解决该问题
    def wrappers(*args, **kwargs):
        # 判断用户是否登陆
        user_id = session.get("user_id")
        user = None
        if user_id:
            # 根据i去数据库取值
            try:
                user = User.query.get(user_id)
            except BaseException as e:
                current_app.logger.error(e)

        g.user = user
        # print(wrappers.__name__)   # 获取函数名称
        return func(*args, **kwargs)

    return wrappers


# 上传文件到七牛云    定义常量页面记录了七牛云域名
def file_upload(data):
    """

    :param data: 要上传的文件
    :return: 保存在七牛云的文件名
    """

    import qiniu
    access_key = "7OkaJ9-9FnyLDZEfUrMlgidS0fqp_7zcjeumbs1C"
    secret_key = "t6LIhHdaMv-FIwuVj-KKx_V4nyoDs8kz_y7J3vzE"
    bucket_name = "infoenv23"  # 空间名称

    q = qiniu.Auth(access_key, secret_key)
    key = None

    token = q.upload_token(bucket_name)

    ret, info = qiniu.put_data(token, key, data)
    if ret is not None:
        file_name = ret.get("key")
        return file_name
    else:
        raise BaseException(info)  # error message in info

